/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.ik.servlets;

import com.ik.pbs.Correo.Correo;
import com.ik.pbs.Correo.SendMail;
import com.ik.pbs.Encapsulados.Anuncios;
import com.ik.pbs.Encapsulados.Ubicacion;
import com.ik.pbs.Manejadores.ManejadorAnuncios;
import com.ik.pbs.Manejadores.ManejadorCategorias;
import com.ik.pbs.Manejadores.ManejadorEstados;
import com.ik.pbs.Manejadores.ManejadorSectores;
import com.ik.pbs.Manejadores.ManejadorUbicacion;
import com.ik.pbs.Manejadores.ManejadorUsuarios;
import com.ik.pbs.conection.ConexionDB;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.tomcat.util.http.fileupload.FileItem;
import org.apache.tomcat.util.http.fileupload.disk.DiskFileItemFactory;
import org.apache.tomcat.util.http.fileupload.servlet.ServletFileUpload;

/**
 *
 * @author Malkavian
 */
@WebServlet(name = "proponerPublicacion", urlPatterns = {"/proponerPublicacion"})
public class proponerPublicacion extends HttpServlet {

    SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");

    /**
     * Processes requests for both HTTP
     * <code>GET</code> and
     * <code>POST</code> methods.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        ConexionDB con = new ConexionDB();
        File file = null;
        int error = 2;
        FileItem item = null;
        String fieldName = "";
        String fileName = "";

        try {

            int maxFileSize = 5000 * 1024;
            int maxMemSize = 5000 * 1024;
            ServletContext context = getServletContext();
            String fullPath = "";
            String filePath = context.getRealPath("") + "\\Recursos\\images\\publicaciones\\";
            String nombre = "";
            String descripcion = "";
            String categoria = "";
            String artista = "";
            String fecha = "";
            String hora = "";
            String predeterminado = "";
            String ubicacion = "";
            String sector = "";
            String descripcionUbi = "";
            String direccuonUbi = "";
            String noid = "";
            String usuario = "";

            // Verify the content type
            String contentType = request.getContentType();
            if ((contentType.indexOf("multipart/form-data") >= 0)) {

                DiskFileItemFactory factory = new DiskFileItemFactory();
                // maximum size that will be stored in memory
                factory.setSizeThreshold(maxMemSize);
                // Location to save data that is larger than maxMemSize.
                factory.setRepository(new File("c:\\temp"));

                // Create a new file upload handler
                ServletFileUpload upload = new ServletFileUpload(factory);
                // maximum file size to be uploaded.
                upload.setSizeMax(maxFileSize);
                try {
                    // Parse the request to get file items.
                    List fileItems = upload.parseRequest(request);

                    // Process the uploaded file items
                    Iterator i = fileItems.iterator();
                    if (i.hasNext()) {
                        while (i.hasNext()) {
                            FileItem fi = (FileItem) i.next();

                            if (!fi.isFormField() && !fi.getName().isEmpty()) {
                                // Get the uploaded file parameters
                                fieldName = fi.getFieldName();
                                fileName = fi.getName();
                                boolean isInMemory = fi.isInMemory();
                                long sizeInBytes = fi.getSize();
                                item = fi;


                            } else {
                                if (fi.getFieldName().equals("nombre")) {
                                    nombre = fi.getString();
                                } else if (fi.getFieldName().equals("descripcion")) {
                                    descripcion = fi.getString();
                                } else if (fi.getFieldName().equals("categoria")) {
                                    categoria = fi.getString();
                                } else if (fi.getFieldName().equals("artista")) {
                                    artista = fi.getString();
                                } else if (fi.getFieldName().equals("fecha")) {
                                    fecha = fi.getString();
                                } else if (fi.getFieldName().equals("hora")) {
                                    hora = fi.getString();
                                } else if (fi.getFieldName().equals("predeterminado")) {
                                    predeterminado = fi.getString();
                                } else if (fi.getFieldName().equals("ubicacion")) {
                                    ubicacion = fi.getString();
                                } else if (fi.getFieldName().equals("sector")) {
                                    sector = fi.getString();
                                } else if (fi.getFieldName().equals("descripcionUbi")) {
                                    descripcionUbi = fi.getString();
                                } else if (fi.getFieldName().equals("direccuonUbi")) {
                                    direccuonUbi = fi.getString();
                                } else if (fi.getFieldName().equals("noid")) {
                                    noid = fi.getString();
                                } else if (fi.getFieldName().equals("usuario")) {
                                    usuario = fi.getString();
                                }
                            }
                        }
                    } else {
                        error = 2;
                    }
                } catch (Exception ex) {
                    System.out.println(ex);
                    if (file != null) {
                        file.deleteOnExit();
                    }

                    error = 2;
                }

                if (!fileName.isEmpty()) {

                    Ubicacion ubi = null;

                    boolean entro = false;

                    if (predeterminado.equals("Si")) {

                        ubi = ManejadorUbicacion.getInstance().getUbicacion(con.getConnectionDB(), Integer.parseInt(ubicacion));
                        entro = true;

                    } else {

                        ubi = new Ubicacion();

                        ubi.setId(ManejadorUbicacion.getInstance().getNext(con.getConnectionDB()));
                        ubi.setDescripcion(descripcionUbi);
                        ubi.setDireccion(direccuonUbi);
                        ubi.setLatitud(0);
                        ubi.setLongitud(0);
                        ubi.setSectores(ManejadorSectores.getInstance().getSector(con.getConnectionDB(), Integer.parseInt(sector)));
                        ubi.setPredefinida(false);

                        if (ManejadorUbicacion.getInstance().insertarUbicacion(con.getConnectionDB(), ubi)) {
                            entro = true;
                        } else {
                            entro = false;
                        }
                    }


                    if (entro) {
                        Anuncios anuncio = null;


                        if (!noid.isEmpty()) {
                            anuncio = ManejadorAnuncios.getInstance().getAnuncio(con.getConnectionDB(), Integer.parseInt(noid));
                        } else {
                            anuncio = new Anuncios();
                            anuncio.setId(ManejadorAnuncios.getInstance().getNext(con.getConnectionDB()));
                            anuncio.setPuntosNegativos(0);
                            anuncio.setPuntosPositivos(0);
                            anuncio.setEstados_id(ManejadorEstados.getInstance().getEstado(con.getConnectionDB(), 1));
                            anuncio.setUsuarios_id(ManejadorUsuarios.getInstance().getUsuario(con.getConnectionDB(), Integer.parseInt(usuario)));
                        }

                        // Write the file
                        if (fileName.lastIndexOf("\\") >= 0) {
                            file = new File(filePath
                                    + anuncio.getId() + "_" + fileName.substring(fileName.lastIndexOf("\\")));
                            fullPath = anuncio.getId() + "_" + fileName.substring(fileName.lastIndexOf("\\"));
                        } else {
                            file = new File(filePath
                                    + anuncio.getId() + "_" + fileName.substring(fileName.lastIndexOf("\\") + 1));
                            fullPath = anuncio.getId() + "_" + fileName.substring(fileName.lastIndexOf("\\") + 1);
                        }
                        // if (!file.exists()) {
                        item.write(file);
                        //  } else {
                        //     error = 3;
                        //  }
                        anuncio.setNombre(nombre);
                        anuncio.setDescripcion(descripcion);
                        anuncio.setArtista(artista);
                        anuncio.setFecha(fecha);
                        anuncio.setHora(hora);
                        anuncio.setFoto("/PBS/Recursos/images/publicaciones/" + fullPath);
                        anuncio.setCategorias_id(ManejadorCategorias.getInstance().getCategoria(con.getConnectionDB(), Integer.parseInt(categoria)));
                        anuncio.setUbicacion(ubi);

                        if (noid.isEmpty()) {

                            if (ManejadorAnuncios.getInstance().insertarAnuncio(con.getConnectionDB(), anuncio)) {
                                error = 1;
                                enviarCorreoIngreso(anuncio.getUsuarios_id().getNombre(), sdf.format(new Date()), anuncio);
                            } else {
                                error = 2;
                            }

                        } else {
                            if (ManejadorAnuncios.getInstance().actualizarAnuncio(con.getConnectionDB(), anuncio)) {
                                error = 1;
                                enviarCorreoModificar(anuncio.getUsuarios_id().getNombre(), sdf.format(new Date()), anuncio);
                            } else {
                                error = 2;
                            }
                        }


                    } else {
                        error = 2;
                    }
                    
                } else {
                    error = 2;
                }
            } else {
                error = 2;
            }

            response.sendRedirect(
                    "/PBS/publicista/proponerPublicacion.jsp?error=" + error);
        } catch (Exception e) {
            System.out.println(e.getMessage());
            error = 2;
            response.sendRedirect("/PBS/publicista/proponerPublicacion.jsp?error=" + error);
        } finally {
            try {
                con.getConnectionDB().close();
                out.close();


            } catch (SQLException ex) {
                Logger.getLogger(subirImagen.class
                        .getName()).log(Level.SEVERE, null, ex);
            }

        }
    }

    public boolean enviarCorreoModificar(String nombre, String fecha, Anuncios a) {
        Correo corr = new Correo();

        String mensaje = "";

        mensaje += "\nId: " + a.getId() + ".";
        mensaje += "\n\nNombre: " + a.getNombre() + ".";
        mensaje += "\n\nCategoria: " + a.getCategorias_id().getDescripcion() + ".";
        mensaje += "\n\nDescripcion: " + a.getDescripcion() + ".";
        mensaje += "\n\nArtistas: " + a.getArtista() + ".";
        mensaje += "\n\nFecha: " + a.getFecha() + " a las " + a.getHora();
        mensaje += "\n\nUbicacion: " + a.getUbicacion().getDescripcion() + ". Localizado en " + a.getUbicacion().getDireccion() + ""
                + " del sector " + a.getUbicacion().getSectores().getDescripcion() + " de la ciudad de "
                + "" + a.getUbicacion().getSectores().getCiudad().getDescripcion() + ", " + a.getUbicacion().getSectores().getCiudad().getProvincias().getRegiones().getPais().getDescripcion() + ".";

        corr.setAsunto("Publicacion para aprobar modificada por " + nombre + " del " + fecha);
        corr.setContenido("Informacion la publicidad para aprobar modificada por el publicisata " + nombre + ":\n\n" + mensaje);
        corr.setContraseña("1nf0rmac10nes");
        corr.setDesde("informacion.pbs@gmail.com");

        String[] hacia = new String[1];

        hacia[0] = "publicationboard@gmail.com";

        corr.setHacia(hacia);

        SendMail send = new SendMail();

        if (send.sendSSLMessage(corr)) {
            return true;
        } else {
            return false;
        }

    }

    public boolean enviarCorreoIngreso(String nombre, String fecha, Anuncios a) {
        Correo corr = new Correo();
        String mensaje = "";

        mensaje += "\nId: " + a.getId() + ".";
        mensaje += "\n\nNombre: " + a.getNombre() + ".";
        mensaje += "\n\nCategoria: " + a.getCategorias_id().getDescripcion() + ".";
        mensaje += "\n\nDescripcion: " + a.getDescripcion() + ".";
        mensaje += "\n\nArtistas: " + a.getArtista() + ".";
        mensaje += "\n\nFecha: " + a.getFecha() + " a las " + a.getHora();
        mensaje += "\n\nUbicacion: " + a.getUbicacion().getDescripcion() + ". Localizado en " + a.getUbicacion().getDireccion() + ""
                + " del sector " + a.getUbicacion().getSectores().getDescripcion() + " de la ciudad de "
                + "" + a.getUbicacion().getSectores().getCiudad().getDescripcion() + ", " + a.getUbicacion().getSectores().getCiudad().getProvincias().getRegiones().getPais().getDescripcion() + ".";

        corr.setAsunto("Nueva Publicacion para aprobar de " + nombre + " del " + fecha);
        corr.setContenido("Informacion la publicidad para aprobar enviada por el publicisata " + nombre + ":\n\n" + mensaje);
        corr.setContraseña("1nf0rmac10nes");
        corr.setDesde("informacion.pbs@gmail.com");

        String[] hacia = new String[1];

        hacia[0] = "publicationboard@gmail.com";

        corr.setHacia(hacia);

        SendMail send = new SendMail();

        if (send.sendSSLMessage(corr)) {
            return true;
        } else {
            return false;
        }

    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP
     * <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Handles the HTTP
     * <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
}
